package opdracht2;

import java.util.PriorityQueue;

public class Processor {

	public Tree createTree(int[] charArray) {
		PriorityQueue<Tree> queue = new PriorityQueue<Tree>();
		// gooi alle leafs in een queue waarbij de kleinste vooraan staat
		for (int i = 0; i < charArray.length; i++) {
			if (charArray[i] > 0) {
				queue.offer(new Leaf(charArray[i], (char) i));
			}
		}
		// blijf loopen totdat er nog maar 1 tree in de queue zit, deze return
		// je
		while (queue.size() > 1) {
			Tree links = queue.poll();
			Tree rechts = queue.poll();

			queue.offer(new Node(links, rechts));
		}

		return queue.poll();
	}

	public void print(Tree tree, StringBuffer code) {
		if (tree instanceof Leaf) {
			Leaf leaf = (Leaf) tree;

			// dit is een leaf dus er hoeft niet verder gezocht te worden, alles
			// wat er nu nog nodig is is de code uitprinten
			System.out.println(leaf.letter + "\t\t" + leaf.frequency + "\t\t" + code);

		} else if (tree instanceof Node) {
			// het is een node, dus roep deze print methode nog 2 keer aan voor
			// de linker en rechter leaf, als hij links gaat komt er een 0 bij
			// de code, als hij rechts gaat komt er een 1 bij de code
			Node node = (Node) tree;
			
			code.append('0');
			print(node.leftTree, code);
			//haal ook 1 bit voor het einde weg, anders worden de code's 2 keer ge-append
			code.deleteCharAt(code.length() - 1 );
			
			code.append('1');
			print(node.rightTree, code);
			code.deleteCharAt(code.length() - 1 );

		}
	}

}
